#include <mips/regdef.h>
#include <sys/syscall.h>
#define stdinfd 	0
#define stdoutfd 	1
#ifndef 	fp
#define	fp	$fp
#endif
#define MAIN_SSIZE	(44)
#define	MAIN_RA		(40)
#define	MAIN_FP		(36)
#define	MAIN_GP		(32)
#define CARGA_S2	(28)
#define CARGA_S1	(24)
#define CARGA_S0	(20)
	.text
	.align 	2
	.globl	main
	.ent	main
# s0: indice
# s1: tamaño vector
# s2: puntero a vector
main:
   	.frame fp,MAIN_SSIZE,ra
   	.set  noreorder
   	.cpload  t9
   	.set  reorder
	subu	sp,sp,MAIN_SSIZE
	.cprestore 16
	sw		ra,MAIN_RA(sp)
	sw		fp,MAIN_FP(sp)
	sw		gp,MAIN_GP(sp)
	sw		s2,CARGA_S2(sp)
	sw		s1,CARGA_S1(sp)
	sw		s0,CARGA_S0(sp)
	move	fp,sp
	#cargo datos en un vector
	la		a0,vector
	la		a1,tamanio
	la		t9,cargarDatos
	jal		ra,t9
	#ordeno los datos
	la	t0,vector
	lw	a0,0(t0)
	la	t0,tamanio
	lw	a1,0(t0)
	la	t9,merge_sort
	jal	ra,t9
L:
	#imprimo vector por pantalla
	la		t1,tamanio
	lw		s1,0(t1)
	ble		s1,zero,L2
	la		t1,vector
	lw		s2,0(t1)
	addu	s0,zero,zero
	li		a0,stdoutfd
	la		a1,auxiliar
	li		a2,1
L0:
	addu	t0,s0,s2
	lb		t1,0(t0)
	sb		t1,0(a1)
	la		t9,escribir
	jal		ra,t9
	addiu	s0,s0,1
	blt		s0,s1,L0
	#salto de línea al final
	#addiu	t0,zero,10
	#sb		t0,0(a1)
	#la		t9,escribir
	#jal		ra,t9
L2:
	#libero memoria
	lw		a0,vector
	la      t9,myfree
    jal     ra,t9
fin_main:
	move	sp,fp		# destruyo stack frame
	lw		s0,CARGA_S0(sp)
	lw		s1,CARGA_S1(sp)
	lw		s2,CARGA_S2(sp)
	lw		gp,MAIN_GP(sp)
	lw		fp,MAIN_FP(sp)
	lw		ra,MAIN_RA(sp)
	addiu	sp,sp,MAIN_SSIZE
	j		ra
	.end	main
.data
vector:		.word 	0
tamanio:	.word	0
auxiliar:	.word	0
